﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using MLopez.BizVal.CW.Base;
using MLopez.BizVal.GUI.Controls;
using MLopez.BizVal.GUI.Biz;
using System.IO;

namespace MLopez.BizVal.GUI.Views
{
    public partial class NavegadorJerarquia : UserControl
    {
        Jerarquia m_jerarquia;

        public Jerarquia Dominio
        {
            get
            {
                return m_jerarquia;
            }
            set
            {
                m_jerarquia = value;
                JerarquiaDataBind();
            }
        }
        
        public NavegadorJerarquia()
        {
            InitializeComponent();
            JerarquiaDataBind();
        }

        public NavegadorJerarquia(Jerarquia j)            
        {
            InitializeComponent();
            m_jerarquia = j;
            JerarquiaDataBind();
        }

        private void JerarquiaDataBind()
        {
            if (m_jerarquia == null)
            {
                tvJerarquia.Items.Clear();
                TreeViewItem raiz = new TreeViewItem();
                raiz.Header = "[VACIO]";
                tvJerarquia.Items.Add(raiz);
            }
            else
            {
                tvJerarquia.Items.Clear();
                TreeViewItem raiz = new TreeViewItem();
                raiz.Header = m_jerarquia.Nombre;
                raiz.DataContext = m_jerarquia;
                foreach (ConjuntoEtiquetas conjunto in m_jerarquia)
                {
                    TreeViewItem nivel = new TreeViewItem();
                    nivel.Header = conjunto.Granularidad + " - " + conjunto.Nombre;
                    nivel.DataContext = conjunto;
                    foreach (TriEtiqueta etiqueta in conjunto)
                    {
                        TreeViewItem hoja = new TreeViewItem();
                        hoja.Header = etiqueta.Indice + " - " + etiqueta.Termino;                 
                        hoja.DataContext = etiqueta;
                        nivel.Items.Add(hoja);
                    }
                    raiz.Items.Add(nivel);
                    raiz.IsExpanded = true;
                }
                tvJerarquia.Items.Add(raiz);
            }
        }
        

        private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
        {            
            if (tvJerarquia.SelectedItem == null)
            {
                MessageBox.Show("Debe seleccionar un item para editar");
            }
            else
            {
                TreeViewItem seleccionado = tvJerarquia.SelectedItem as TreeViewItem;
                string nombre = seleccionado.Header as string;
                EditarElementoJerarquia cambiarNombreDialog = new EditarElementoJerarquia(nombre);
                cambiarNombreDialog.Closed += new EventHandler(cambiarNombreDialog_Closed);
                cambiarNombreDialog.Show();             
            }
        	
        }

        void cambiarNombreDialog_Closed(object sender, EventArgs e)
        {
            EditarElementoJerarquia dialog = sender as EditarElementoJerarquia;
            if (dialog.DialogResult == true)
            {
                TreeViewItem seleccionado = tvJerarquia.SelectedItem as TreeViewItem;
                string nombre = seleccionado.Header as string;
                string[] tokens = nombre.Split("-".ToCharArray());
                if (tokens.Length == 1)
                    seleccionado.Header = dialog.NuevoNombre;
                else
                    seleccionado.Header = tokens[0].Trim() + " - " + dialog.NuevoNombre;
            }
        }

        private void btnCargarXml_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Jerarquia retVal = JerarquiaBiz.GetJerarquiaFromXml();
                if (retVal != null)
                {
                    m_jerarquia = retVal;
                    JerarquiaDataBind();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al cargar la jerarquia: " + ex.Message, "Error!", MessageBoxButton.OK);
            }

        }

        private void btnCrear_Click(object sender, RoutedEventArgs e)
        {
            CrearJerarquia dialog = new CrearJerarquia();
            dialog.Closed += new EventHandler(dialog_Closed);
            dialog.Show();
            
        }

        void dialog_Closed(object sender, EventArgs e)
        {
            
            CrearJerarquia dialog = sender as CrearJerarquia;
            if (dialog.DialogResult == true)
            {
                int minGran = dialog.GranularidadMin;
                int niveles = dialog.Niveles;
                string nombre = dialog.Nombre;
                m_jerarquia = new Jerarquia(niveles, minGran, nombre);
                JerarquiaDataBind();
            }            
        }


    }
}
